home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Utilities / WBStars / source / WBStars_main.c < prev    next >
C/C++ Source or Header  |  1996-07-25  |  10KB  |  297 lines

  1. /* $VER: WBStars_main.c 1.31 (25 Jul 1996) */
  2.  
  3. #include "WBStars_include.h"
  4. #include "WBStars_protos.h"
  5. #include "WBStars_gui.h"
  6.  
  7. #ifdef LATTICE
  8. int CXBRK(void)     { return(0); }  /* Disable Lattice CTRL/C handling */
  9. void chkabort(void) { return; }     /* really */
  10. #endif
  11.  
  12. long    _stack=4000;
  13. char    *_procname="WBStars";
  14. long    _priority=0;
  15. long    _BackGroundIO=FALSE;
  16.  
  17. char    version[]={"$VER: WBStars 1.3 (25.07.96) \0"};
  18.  
  19. struct NewBroker        newbroker = {
  20.        NB_VERSION,
  21.         "WBStars",
  22.         "Version 1.3 ©1996 by Alexander Pokahr",
  23.         "The Warp engine for Workbench !",
  24.         NBU_NOTIFY|NBU_UNIQUE,  COF_SHOW_HIDE,  0,      0,      0
  25. };
  26.  
  27. CxObj                   *broker;
  28. struct MsgPort  *broker_mp;
  29. ULONG                   cxsigflag;
  30.  
  31. struct stars far        star[MAXSTARS];
  32. short                           az=AZI;
  33. short                           he=HEI;
  34. short                           az2=AZI;
  35. short                           he2=HEI;
  36. short                           wbs_pri=PRI;
  37. char                            status=ACTIVE;
  38. char                            mode=STRTMODE;
  39. char                            anzstars=MAXSTARS;
  40. char                            warpf=WRP;
  41. short                           bgpen=BACKPEN;
  42. char                            file[60]={"WBStars.pre"};
  43. char                            dir[60]={"SYS:Prefs/Presets"};
  44. char                            pat[60]={"#?.pre"};
  45. char                            immediate=FALSE;
  46.  
  47. void _main( char *line )
  48. {
  49.         CxMsg *msg;
  50.  
  51.         if(OpenLibraries())
  52.         {
  53.                 if (broker_mp = CreateMsgPort())
  54.                 {
  55.                         newbroker.nb_Port = broker_mp;
  56.                         cxsigflag = 1L << broker_mp->mp_SigBit;
  57.                         if (broker = CxBroker(&newbroker, NULL))
  58.                         {
  59.                                 ActivateCxObj(broker, 1L);
  60.                                 LoadPrefs("ENV:WBStars.prefs");
  61.                                 SetTaskPri(FindTask(0),wbs_pri);
  62.                                 Screen=NULL;
  63.                                 wnd=NULL;
  64.                                 Warp();
  65.                                 DeleteCxObj(broker);
  66.                                 while(msg = (CxMsg *)GetMsg(broker_mp))
  67.                                 {
  68.                                                 ReplyMsg((struct Message *)msg);
  69.                                 }
  70.                         }
  71.                         DeletePort(broker_mp);
  72.                 }
  73.         }
  74.         CloseLibraries();
  75. }
  76.  
  77. void    Warp()
  78. {
  79.         char i;
  80.  
  81.         while( CheckInteraction() )
  82.         {
  83.                 if( status==ACTIVE )
  84.                 {
  85.                         for(i=0; i<anzstars; i++)
  86.                         {
  87.                                 
  88.                                 if( WinWait() )
  89.                                 {
  90.                                         ClearStar(i);
  91.                                         PlotStar(i);
  92.                                 }
  93.                                 else
  94.                                 {
  95.                                         break;
  96.                                 }
  97.                         }
  98.                         Delay( STAR_WAIT );
  99.                 }
  100.                 else
  101.                 {
  102.                         Delay( EVENT_WAIT );
  103.                 }
  104.         }
  105. }
  106.  
  107. char    LoadPrefs( char *path )
  108. {
  109.         BPTR    fh;
  110.         long    form=0x464f524d;
  111.         long    pref=0x50524546;
  112.         long    wbst=0x57425354;
  113.         long    lng;
  114.         long    size;
  115.         long    rd;
  116.         char    bt;
  117.  
  118.         fh=Open(path,MODE_OLDFILE);
  119.         if(!fh) return FALSE;
  120.  
  121.         Read(fh,&lng,4);
  122.         if(lng!=form) {Close(fh);return FALSE;}
  123.  
  124.         Seek(fh,4,OFFSET_CURRENT);
  125.         Read(fh,&lng,4);
  126.         if(lng!=pref) {Close(fh);return FALSE;}
  127.  
  128.         rd=Read(fh,&lng,4);
  129.  
  130.         while( rd && (lng!=wbst) )
  131.         {
  132.                 Read(fh,&lng,4);
  133.                 Seek(fh,lng,OFFSET_CURRENT);
  134.                 rd=Read(fh,&lng,4);
  135.         }
  136.         
  137.         if(!rd) {Close(fh);return FALSE;}
  138.  
  139.         Read(fh,&size,4);
  140.         while(size)
  141.         {
  142.                 Read(fh,&bt,1);
  143.                 if(bt)
  144.                 {
  145.                         Read(fh,&bt,1);
  146.                         Seek(fh,bt,OFFSET_CURRENT);
  147.                         size=size-2-bt;
  148.                 }
  149.                 else
  150.                 {
  151.                         Read(fh,&bt,1);
  152.                         switch(bt)
  153.                         {
  154.                                 case    1:      Read(fh,&wbs_pri,2);break;
  155.                                 case    2:      Seek(fh,1,OFFSET_CURRENT);Read(fh,&mode,1);break;
  156.                                 case    3:      Seek(fh,1,OFFSET_CURRENT);Read(fh,&anzstars,1);break;
  157.                                 case    4:      Seek(fh,1,OFFSET_CURRENT);Read(fh,&warpf,1);break;
  158.                                 case    5:      Read(fh,&az,2);az2=az;break;
  159.                                 case    6:      Read(fh,&he,2);he2=he;break;
  160.                                 case    7:      Read(fh,&bgpen,2);break;
  161.                                 case    8:      Seek(fh,1,OFFSET_CURRENT);Read(fh,&contrast,1);break;
  162.  
  163.                                 default:        Read(fh,&lng,2);
  164.                         }
  165.                         size=size-4;
  166.                 }
  167.         }
  168.  
  169.         Close( fh );
  170.         
  171.  
  172.         return TRUE;
  173. }
  174.  
  175. char SavePrefs( char *path, char overwrite )
  176. {
  177.         BPTR    fh;
  178.         short   pref[PREF_CNT][2];
  179.         short   hdr[5]={0,6,0,0,0};
  180.         char    ver[]={"$VER: WBStars.prefs 1.3\0"};
  181.         long    lenver;
  182.         long    lenpref;
  183.         long    len;
  184.         struct EasyStruct       ez_full={sizeof(struct EasyStruct),0,"WBStars Trouble!!!","\nPrefs could not be saved !\n\nProbably the disk is full.\n"," Shit !! "};
  185.         struct EasyStruct       ez_wrong={sizeof(struct EasyStruct),0,"WBStars Trouble!!!","\nPrefs could not be saved !\n\nProbably wrong directory.\n"," Oops "};
  186.         struct EasyStruct       ez_exist={sizeof(struct EasyStruct),0,"WBStars Question","\nThe file does already exist !\n\nDo you want to overwrite it ?\n"," Kill that old stuff ! | No, please don´t ! "};
  187.  
  188.         pref[0][0]=(short)1;
  189.         pref[0][1]=(short)wbs_pri;
  190.  
  191.         pref[1][0]=(short)2;
  192.         pref[1][1]=(short)mode;
  193.  
  194.         pref[2][0]=(short)3;
  195.         pref[2][1]=(short)anzstars;
  196.  
  197.         pref[3][0]=(short)4;
  198.         pref[3][1]=(short)warpf;
  199.  
  200.         pref[4][0]=(short)5;
  201.         pref[4][1]=(short)az;
  202.  
  203.         pref[5][0]=(short)6;
  204.         pref[5][1]=(short)he;
  205.  
  206.         pref[6][0]=(short)7;
  207.         pref[6][1]=(short)bgpen;
  208.  
  209.         pref[7][0]=(short)8;
  210.         pref[7][1]=(short)contrast;
  211.  
  212.         lenver=(long)(strlen((char *)&ver)+1);
  213.         lenpref=(long)(PREF_CNT*4);
  214.         len=(long)(42+lenver+lenpref);
  215.  
  216.         if(path)
  217.         {
  218.                 if(fh=Open(path,MODE_OLDFILE))
  219.                 {
  220.                         if(!overwrite&&!EasyRequestArgs(WBStarsWnd,&ez_exist,0,NULL))
  221.                         {
  222.                                 Close(fh);
  223.                                 return FALSE;
  224.                         }
  225.                         Close(fh);
  226.                 }
  227.                 if(!(fh=Open(path,MODE_NEWFILE)))
  228.                 {               
  229.                         EasyRequestArgs(WBStarsWnd,&ez_wrong,0,NULL);
  230.                         return FALSE;
  231.                 }
  232.                 Write(fh,"FORM",4);
  233.                 Write(fh,&len,4);
  234.                 Write(fh,"PREFPRHD",8);
  235.                 Write(fh,&hdr,10);
  236.                 Write(fh,"PVER",4);
  237.                 Write(fh,&lenver,4);
  238.                 Write(fh,&ver,lenver);
  239.                 Write(fh,"WBST",4);
  240.                 Write(fh,&lenpref,4);
  241.                 if(Write(fh,&pref[0][0],lenpref)!=lenpref)
  242.                 {
  243.                         Close(fh);
  244.                         EasyRequestArgs(WBStarsWnd,&ez_full,0,NULL);
  245.                         return FALSE;
  246.                 }
  247.                 Close(fh);
  248.         }
  249.         else
  250.         {
  251.                 if(!(fh=Open("ENV:WBStars.prefs",MODE_NEWFILE)))
  252.                 {               
  253.                         EasyRequestArgs(WBStarsWnd,&ez_wrong,0,NULL);
  254.                         return FALSE;
  255.                 }
  256.                 Write(fh,"FORM",4);
  257.                 Write(fh,&len,4);
  258.                 Write(fh,"PREFPRHD",8);
  259.                 Write(fh,&hdr,10);
  260.                 Write(fh,"PVER",4);
  261.                 Write(fh,&lenver,4);
  262.                 Write(fh,&ver,lenver);
  263.                 Write(fh,"WBST",4);
  264.                 Write(fh,&lenpref,4);
  265.                 if(Write(fh,&pref[0][0],lenpref)!=lenpref)
  266.                 {
  267.                         Close(fh);
  268.                         EasyRequestArgs(WBStarsWnd,&ez_full,0,NULL);
  269.                         return FALSE;
  270.                 }
  271.                 Close(fh);
  272.                 if(!(fh=Open("ENVARC:WBStars.prefs",MODE_NEWFILE)))
  273.                 {               
  274.                         EasyRequestArgs(WBStarsWnd,&ez_wrong,0,NULL);
  275.                         return FALSE;
  276.                 }
  277.                 Write(fh,"FORM",4);
  278.                 Write(fh,&len,4);
  279.                 Write(fh,"PREFPRHD",8);
  280.                 Write(fh,&hdr,10);
  281.                 Write(fh,"PVER",4);
  282.                 Write(fh,&lenver,4);
  283.                 Write(fh,&ver,lenver);
  284.                 Write(fh,"WBST",4);
  285.                 Write(fh,&lenpref,4);
  286.                 if(Write(fh,&pref[0][0],lenpref)!=lenpref)
  287.                 {
  288.                         Close(fh);
  289.                         EasyRequestArgs(WBStarsWnd,&ez_full,0,NULL);
  290.                         return FALSE;
  291.                 }
  292.                 Close(fh);
  293.         }
  294.  
  295.         return TRUE;
  296. }
  297.